#include "bs32f1xx_ll_bus.h"
#include "led.h"

void led_init(void)
{
  LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
	
  LL_IOP_EnableClock(LL_IOP_PERIPH_GPIOB);
  LL_IOP_EnableClock(LL_IOP_PERIPH_GPIOA);

  GPIO_InitStruct.Pin = LED_1_PIN;
  GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
  LL_GPIO_Init(LED_1_PORT, &GPIO_InitStruct);
  
  GPIO_InitStruct.Pin = LED_R_PIN;
  LL_GPIO_Init(LED_R_PORT, &GPIO_InitStruct);
  GPIO_InitStruct.Pin = LED_G_PIN;
  LL_GPIO_Init(LED_G_PORT, &GPIO_InitStruct);  
  GPIO_InitStruct.Pin = LED_B_PIN;
  LL_GPIO_Init(LED_B_PORT, &GPIO_InitStruct);  
  
  LL_GPIO_SetOutputPin(LED_1_PORT,LED_1_PIN);
  LL_GPIO_SetOutputPin(LED_R_PORT,LED_R_PIN);
  LL_GPIO_SetOutputPin(LED_G_PORT,LED_G_PIN);
  LL_GPIO_SetOutputPin(LED_B_PORT,LED_B_PIN);  
}



void led_on_off(GPIO_TypeDef *GPIOx, uint32_t PinMask,int8_t on)
{
	if(on){
		LL_GPIO_ResetOutputPin(GPIOx,PinMask);
	}else{
		LL_GPIO_SetOutputPin(GPIOx,PinMask);
	}
}

void led_control(led_type led,int8_t status)
{
	switch(led){
		case LED_1:
			led_on_off(LED_1_PORT,LED_1_PIN,status);
			break;
		case LED_R:
			led_on_off(LED_R_PORT,LED_R_PIN,status);
			break;
		case LED_G:
			led_on_off(LED_G_PORT,LED_G_PIN,status);
			break;
		case LED_B:
			led_on_off(LED_B_PORT,LED_B_PIN,status);
			break;
		case LED_ALL:
			led_on_off(LED_1_PORT,LED_1_PIN,status);
			led_on_off(LED_R_PORT,LED_R_PIN,status);
			led_on_off(LED_G_PORT,LED_G_PIN,status);
			led_on_off(LED_B_PORT,LED_B_PIN,status);
			break;
	}
}
